1. Technical Field
The embodiments of the present invention generally relate to a system and method for determining affinity groups and co-locating the affinity groups to various nodes in a distributed network.
2. Background Art
A distributed network is generally defined as a connected network consisting of numerous computers (or nodes) positioned throughout multiple locations that are capable of communicating with one another. These computers appear to users as part of single large network of shared hardware and software. The intent of the distributed network is to appear to users as a single system. A policy may be needed to determine what tasks are executed on the various nodes throughout the network. A task is generally defined as a unit of computation that is performed on behalf of a user from a computing device within the distributed network. For horizontal scalability, it is preferable to balance loads between the nodes so that each node is utilized effectively.
Common approaches to load balancing include performing a simple Domain Name System (DNS) round robin assignment or the use of a hardware based load balancer. The latter, while more expensive, may have the advantage of maintaining an affinity between a client and a particular node (which is part of the distributed network) in the system. More complex load balancers take into account system health to ensure that no node (or computing device within the network) is overwhelmed and also to detect when a node can be disconnected from other nodes in the network due to under use. Such common approaches may be adequate when the set of resources are stable or when tasks that are undertaken by the nodes are independent. However, these approaches may not be suited to efficiently handle tasks when the set of resources are generally dynamic in nature or when the tasks communicate with each other or require access to common information.